#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "arista.h"


/**
  \struct Estructura "edge" o arista.
  from : entero que representa el nombre del origen de la arista.
  to : entero que representa el nombde del destino de la arista.
  cap : entero que representa la capacidad de flujo de dicha arista.
 */
struct s_edge {
	int from; /*!< Nodo origen*/
	int to; /*!< Nodo destino*/
	int cap; /*!< Capacidad arista*/
};

/**
  Creador de aristas.
  \param f : entero que representa el nombre del origen de la arista.
  \param t : entero que representa el nombde del destino de la arista.
  \param c : entero que representa la capacidad de flujo de dicha arista.
  \return  : devolvemos la arista recien creada con la estructura correspondiente.
 */
edge edge_create(int f, int t, int c){
	edge e = NULL;
	e = (edge) malloc(sizeof(struct s_edge));
	if (e != NULL){
		e->from = f;
		e->to = t;
		e->cap = c;
	}
	return e;
}

/**
  Creador de aristas.
   \pre
    <code> (e != NULL) </code>
  \param e : tomamos una arista "e" y obtenemos de su estructura la capacidad de la misma.
 */
int edge_cap(edge e){
	assert (e != NULL);
	return e->cap;
}

/**
  Creador de aristas.
    \pre
    <code> (e != NULL) </code>
  \param e : tomamos una arista "e" y obtenemos de su estructura el destino de la misma.
 */
int edge_to(edge e){
	assert (e != NULL);
	return e->to;	
}

/**
  Creador de aristas.
    \pre
    <code> (e != NULL) </code>
  \param e : tomamos una arista "e" y obtenemos de su estructura el origen de la misma.
 */
int edge_from(edge e){
	assert (e != NULL);
	return e->from;
}

/**
  Creador de aristas.
    \pre
    <code> (e != NULL) </code>
  \param e : tomamos una arista "e" y liberamos la memo la misma.
  \return  : devuelve NULL una vez liberada.
 */
edge edge_destroy(edge e){
    assert(e!=NULL);
	free(e);
	e = NULL;
	return e;
}

